import os
import sys
import argparse
import pandas as pd
from parse_word_to_excel import process_document, setup_logging, FIELDS

def parse_arguments():
    """解析命令行参数"""
    parser = argparse.ArgumentParser(description='解析单个Word文档并提取应用信息')
    parser.add_argument('-i', '--input', type=str, required=True,
                        help='要解析的Word文档路径')
    parser.add_argument('-o', '--output', type=str,
                        help='输出Excel文件路径，如不指定则输出到控制台')
    parser.add_argument('-l', '--log', type=str, default="single_report.log",
                        help='日志文件路径')
    
    return parser.parse_args()

def process_single_document(input_file, output_file=None):
    """处理单个Word文档"""
    # 检查文件是否存在
    if not os.path.exists(input_file):
        print(f"文件不存在: {input_file}")
        return False
    
    print(f"开始处理文件: {input_file}")
    
    # 处理文档
    result = process_document(input_file)
    
    # 检查结果是否为空
    is_empty = True
    for field in result:
        if field != "检测结果" and field != "备注" and result[field]:
            is_empty = False
            break
    
    if is_empty:
        print(f"警告: 文件 {input_file} 解析结果为空")
        # 添加文件名作为应用名称，以便于识别
        file_name = os.path.basename(input_file)
        result["应用名称"] = file_name.split('.')[0]
        result["备注"] = "解析失败，请手动检查"
    
    # 输出结果
    if output_file:
        # 创建DataFrame并保存为Excel
        df = pd.DataFrame([result])
        
        # 确保所有列都存在
        for field in FIELDS:
            if field not in df.columns:
                df[field] = ""
        
        # 重新排序列
        df = df[FIELDS]
        
        # 确保输出目录存在
        output_dir = os.path.dirname(output_file)
        if output_dir and not os.path.exists(output_dir):
            os.makedirs(output_dir)
        
        # 保存到Excel
        try:
            df.to_excel(output_file, index=False)
            print(f"解析完成，结果已保存到: {output_file}")
        except PermissionError:
            # 如果没有权限，保存到当前目录
            current_dir_output = os.path.join(os.getcwd(), "single_report_analysis.xlsx")
            df.to_excel(current_dir_output, index=False)
            print(f"原路径无写入权限，结果已保存到: {current_dir_output}")
    else:
        # 输出到控制台
        print("\n解析结果:")
        max_key_len = max(len(key) for key in result.keys())
        for key, value in result.items():
            print(f"{key.ljust(max_key_len)}: {value}")
    
    return True

def main():
    """主函数"""
    # 解析命令行参数
    args = parse_arguments()
    
    # 设置日志
    setup_logging(args.log)
    
    # 处理文档
    success = process_single_document(args.input, args.output)
    
    if success:
        return 0
    else:
        return 1

if __name__ == "__main__":
    sys.exit(main()) 